/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import model.dominio.Professor;

/**
 *
 * @author Teao
 */
public class DaoProfessor {
    
    
    //String para criar nova linha no arquivo, deve se usar esse código pois a quebra de linha no linux e no windows é diferente.
    static final String NL = System.getProperty("line.separator");
    //nome do arquivo de texto que serão salvos os dados do objeto
    static final String ARQUIVO = "BDProfessor.txt";
    
    public DaoProfessor() {
        try {
            File f = new File(ARQUIVO);

            FileWriter fw = new FileWriter(f, true);
            PrintWriter pw = new PrintWriter(fw);
            pw.print("");
            pw.flush();
            pw.close();
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao gravar no arquivo, por favor contate o administrador.");
        }
}

    public void cadastrar(Professor professor) {
        
        File f = new File(ARQUIVO);
        ArrayList<Professor> listaDeProfessor = obterLista();
        
        try {
            for (Professor professor1 : listaDeProfessor) {
            if (professor.getCpf().equals(professor1.getCpf())) {
                System.out.println("\n    Professor já cadastrado.");
                return;
                }
            }

            int codigoGerado = 1;
            if (f.exists()) {
                FileReader fr = new FileReader(f);
                LineNumberReader lnr = new LineNumberReader(fr);
                lnr.skip(f.length());
                codigoGerado = lnr.getLineNumber() + 1;
                lnr.close();
            }

            professor.setCodigoProfessor(codigoGerado);
            FileWriter fw = new FileWriter(f, true);
            PrintWriter pw = new PrintWriter(fw);
            pw.println(professor.toString());
            pw.flush();
            pw.close();


        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao gravar no arquivo, por favor contate o administrador.");
        }
    }

    public Professor buscar(String palavraChave) {
        FileReader fr = null;
        String linha = "";
        
        try {
            File f = new File(ARQUIVO);
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
            
            while ((linha = bfr.readLine()) != null) {
                if (linha.contains(palavraChave)) {
                    return new Professor(linha);
                }
            }
            
           if ((linha = bfr.readLine()) == null){
               System.out.println("O nome ou o CPF digitado está errado, ou usuário não existe.");
               return new Professor(); 
           }
                        
        } catch (FileNotFoundException ex) {
            System.out.println("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
        return null;
    }
    
    public ArrayList<Professor> obterLista() {
        FileReader fr = null;
        ArrayList<Professor> professores= new ArrayList<Professor>();
        try {
            File f = new File(ARQUIVO);
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
            
            String linha = "";
            while ((linha = bfr.readLine()) != null) {
                professores.add(new Professor(linha));
            }
            return professores;
        } catch (FileNotFoundException ex) {
            System.out.println("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
        return null;
    }    
}
